Refactor switchable experiment, analysis, and display categories#157
Refactor switchable experiment, analysis, and display categories#157AndrewSazonov merged 47 commits intodevelopfrom
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## develop #157 +/- ##
===========================================
+ Coverage 82.26% 88.30% +6.04%
===========================================
Files 88 151 +63
Lines 5451 8698 +3247
Branches 454 891 +437
===========================================
+ Hits 4484 7681 +3197
+ Misses 802 722 -80
- Partials 165 295 +130
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
This PR refactors EasyDiffraction’s experiment/project/analysis architecture around explicit switchable categories (notably analysis.fit, experiment calculation, and project-level display), updates CIF serialization accordingly, and refreshes tests/tutorials to match the new API surface.
Changes:
- Replace the legacy analysis
fit_mode/current_minimizersurface with a unifiedanalysis.fitcategory (mode + minimizer + callable fit entry-point). - Introduce explicit switchable categories for experiment calculation selection (
experiment.calculation) and project display configuration (project.display), persisted via CIF. - Update CIF numeric formatting (more readable values + uncertainty formatting) and refresh unit/integration tests + docs/tutorials to match.
Reviewed changes
Copilot reviewed 130 out of 132 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/unit/easydiffraction/test___main__.py | Updates CLI fit test expectations for the new display API and removed summary call. |
| tests/unit/easydiffraction/summary/test_summary_details.py | Adapts summary tests to new analysis/experiment configuration locations. |
| tests/unit/easydiffraction/summary/test_summary.py | Updates minimizer access pattern to analysis.fit.minimizer_type. |
| tests/unit/easydiffraction/project/test_project_load.py | Verifies round-tripping of fit config and new display configuration. |
| tests/unit/easydiffraction/project/categories/display/test_factory.py | Adds unit tests for the new DisplayFactory. |
| tests/unit/easydiffraction/project/categories/display/test_default.py | Adds unit tests for default project Display category behavior and CIF restore. |
| tests/unit/easydiffraction/io/cif/test_serialize_more.py | Adjusts serialization expectations for new numeric formatting + fit CIF keys. |
| tests/unit/easydiffraction/io/cif/test_serialize.py | Adds/updates tests for parameter formatting, including uncertainty rendering. |
| tests/unit/easydiffraction/datablocks/structure/categories/test_atom_site_aniso.py | Updates aniso ADP sync/CIF expectations (omit iso atoms from aniso loop). |
| tests/unit/easydiffraction/datablocks/experiment/test_collection.py | Updates experiment dummy type to include scattering_type. |
| tests/unit/easydiffraction/datablocks/experiment/item/test_enums_coverage.py | Updates peak-profile enum coverage for canonical tags and TOF additions. |
| tests/unit/easydiffraction/datablocks/experiment/item/test_bragg_sc_coverage.py | Adjusts extinction “show” API naming and expectations. |
| tests/unit/easydiffraction/datablocks/experiment/item/test_base_coverage.py | Updates calculator/peak-profile “show” API calls and calculation access. |
| tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_tof.py | Adds enum-description consistency assertions for TOF peak classes. |
| tests/unit/easydiffraction/datablocks/experiment/categories/peak/test_factory.py | Updates peak factory tests for canonical tags + context-local aliasing. |
| tests/unit/easydiffraction/datablocks/experiment/categories/instrument/test_tof.py | Updates expected default TOF quadratic correction value. |
| tests/unit/easydiffraction/datablocks/experiment/categories/calculation/test_factory.py | Adds unit tests for new experiment CalculationFactory. |
| tests/unit/easydiffraction/datablocks/experiment/categories/calculation/test_default.py | Adds unit tests for Calculation category delegation + CIF restore. |
| tests/unit/easydiffraction/datablocks/experiment/categories/background/test_base.py | Updates background CIF numeric formatting expectations. |
| tests/unit/easydiffraction/core/test_parameters.py | Updates expected CIF string rendering for uncertainty formatting. |
| tests/unit/easydiffraction/analysis/test_analysis_coverage.py | Updates coverage tests to use analysis.fit.minimizer_type. |
| tests/unit/easydiffraction/analysis/test_analysis.py | Updates analysis tests to new analysis.fit API and help output. |
| tests/unit/easydiffraction/analysis/categories/test_fit_mode.py | Removes tests for the deleted fit_mode category. |
| tests/unit/easydiffraction/analysis/categories/test_fit.py | Adds unit tests for the new fit category (mode + minimizer). |
| tests/unit/easydiffraction/analysis/calculators/test_cryspy.py | Adds a TOF pseudo-Voigt CIF-section test for Cryspy integration. |
| tests/integration/scipp-analysis/dream/test_package_import.py | Makes version-check integration test resilient to newer upstream releases. |
| tests/integration/fitting/test_switch-calculator.py | Updates calculator switching to the new experiment.calculation surface. |
| tests/integration/fitting/test_project_load.py | Updates fit-config round-trip assertions to analysis.fit. |
| tests/integration/fitting/test_powder-diffraction_time-of-flight.py | Updates minimizer configuration to analysis.fit.minimizer_type. |
| tests/integration/fitting/test_powder-diffraction_joint-fit.py | Updates joint-fit mode/minimizer configuration to analysis.fit. |
| tests/integration/fitting/test_powder-diffraction_constant-wavelength.py | Updates minimizer configuration to analysis.fit.minimizer_type. |
| tests/integration/fitting/test_plotting.py | Updates plotting entry point to project.display.plotter. |
| tests/integration/fitting/test_multi.py | Updates multi-workflow integration tests to new fit + calculation API. |
| tests/integration/fitting/test_exploration_help.py | Updates switchable-category “show” APIs and calculation access paths. |
| tests/integration/fitting/test_aniso_adp_fitting.py | Updates expectation: iso atoms omitted (not ?) from aniso CIF loop. |
| tests/integration/fitting/test_analysis_display.py | Updates minimizer “show” calls to analysis.fit.show_minimizer_types. |
| tests/integration/fitting/conftest.py | Updates fitted-project fixture to set minimizer via analysis.fit. |
| tests/functional/test_switchable_categories.py | Updates functional expectations for analysis.fit and calculation accessor. |
| tests/functional/test_adp_switching.py | Updates CIF expectation: mixed ADP excludes iso atoms from aniso loop. |
| src/easydiffraction/utils/utils.py | Updates the external data index ref + hash. |
| src/easydiffraction/summary/summary.py | Updates summary rendering to pull calculator/minimizer from new categories. |
| src/easydiffraction/project/project.py | Introduces project-level display category and persists it in project.cif. |
| src/easydiffraction/project/categories/display/factory.py | Adds factory for project display categories. |
| src/easydiffraction/project/categories/display/default.py | Implements default project display category with plotter/tabler selection + CIF IO. |
| src/easydiffraction/project/categories/display/init.py | Exposes Display and DisplayFactory for registration/import. |
| src/easydiffraction/project/categories/init.py | Adds project categories package marker. |
| src/easydiffraction/io/cif/serialize.py | Updates numeric formatting, adds project config CIF (incl. display), and refactors analysis CIF to _fit.*. |
| src/easydiffraction/datablocks/structure/item/base.py | Changes aniso sync to include only anisotropic atoms and remove iso entries. |
| src/easydiffraction/datablocks/structure/categories/atom_sites/default.py | Triggers aniso sync when switching ADP type from anisotropic to isotropic. |
| src/easydiffraction/datablocks/structure/categories/atom_site_aniso/default.py | Removes legacy “question-mark rows for iso atoms” CIF behavior. |
| src/easydiffraction/datablocks/experiment/item/factory.py | Normalizes switchable type descriptors after CIF loading. |
| src/easydiffraction/datablocks/experiment/item/enums.py | Renames peak-profile enum tags to canonical, mode-specific values and adds TOF pV. |
| src/easydiffraction/datablocks/experiment/item/bragg_pd.py | Updates background support filtering and show method to use calculation category and new table rendering. |
| src/easydiffraction/datablocks/experiment/item/base.py | Introduces experiment calculation category, CIF restore, and updated show APIs. |
| src/easydiffraction/datablocks/experiment/categories/peak/total.py | Aligns total-scattering peak metadata with canonical peak-profile enum tags. |
| src/easydiffraction/datablocks/experiment/categories/peak/tof.py | Adds TOF pseudo-Voigt profile and aligns TOF peak tags/descriptions with enums. |
| src/easydiffraction/datablocks/experiment/categories/peak/factory.py | Adds context-local aliasing and enhanced supported-type printing. |
| src/easydiffraction/datablocks/experiment/categories/peak/cwl_mixins.py | Adjusts FCJ asymmetry defaults. |
| src/easydiffraction/datablocks/experiment/categories/peak/cwl.py | Aligns CWL peak tags/descriptions with canonical peak-profile enum values. |
| src/easydiffraction/datablocks/experiment/categories/peak/init.py | Exports the new TOF pseudo-Voigt peak class. |
| src/easydiffraction/datablocks/experiment/categories/instrument/tof.py | Changes default TOF quadratic correction to 0.0. |
| src/easydiffraction/datablocks/experiment/categories/data/total_pd.py | Updates calculator access to experiment.calculation.calculator. |
| src/easydiffraction/datablocks/experiment/categories/data/bragg_sc.py | Updates calculator access to experiment.calculation.calculator. |
| src/easydiffraction/datablocks/experiment/categories/data/bragg_pd.py | Updates calculator access to experiment.calculation.calculator. |
| src/easydiffraction/datablocks/experiment/categories/calculation/factory.py | Adds factory for experiment calculation categories. |
| src/easydiffraction/datablocks/experiment/categories/calculation/default.py | Implements calculation category (calculator type + delegation to parent). |
| src/easydiffraction/datablocks/experiment/categories/calculation/init.py | Exposes Calculation and CalculationFactory. |
| src/easydiffraction/analysis/sequential.py | Updates sequential fitting template to read minimizer/calculator from new categories. |
| src/easydiffraction/analysis/categories/fit_mode/fit_mode.py | Removes legacy fit-mode category implementation. |
| src/easydiffraction/analysis/categories/fit_mode/init.py | Removes legacy fit-mode exports. |
| src/easydiffraction/analysis/categories/fit/factory.py | Renames/replaces fit-mode factory with FitFactory. |
| src/easydiffraction/analysis/categories/fit/enums.py | Updates fit-mode enum behavior (returns empty string for unknown). |
| src/easydiffraction/analysis/categories/fit/default.py | Adds Fit category: minimizer + mode + show helpers + callable run entry-point + CIF restore hook. |
| src/easydiffraction/analysis/categories/fit/init.py | Exposes new fit category components. |
| src/easydiffraction/analysis/calculators/cryspy.py | Updates TOF peak CIF rendering and peak-update logic; removes prior cryspy DWF monkey-patch. |
| src/easydiffraction/analysis/calculators/crysfml.py | Adds TOF calculation path, refactors experiment dict construction and mappings. |
| src/easydiffraction/analysis/analysis.py | Rewires analysis to use fit category and makes fit execution internal (_run_fit). |
| src/easydiffraction/main.py | Updates CLI to use project.display.plotter and comments out summary output. |
| pyproject.toml | Adds pytest-benchmark to dev dependencies. |
| docs/mkdocs.yml | Reorganizes tutorial navigation and adds BEER tutorial entry. |
| docs/docs/user-guide/first-steps.md | Updates examples to new calculation/display/minimizer APIs. |
| docs/docs/user-guide/analysis-workflow/project.md | Updates project/experiment/analysis CIF examples for new _display + _fit + _calculation keys. |
| docs/docs/user-guide/analysis-workflow/analysis.md | Updates analysis workflow docs for analysis.fit, calculation category, and display usage. |
| docs/docs/tutorials/index.md | Reorganizes tutorial index and adds a Simulated Data section. |
| docs/docs/tutorials/index.json | Adds tutorial metadata for new BEER tutorial. |
| docs/docs/tutorials/ed-9.py | Updates tutorial to use project.display.plotter and new show methods. |
| docs/docs/tutorials/ed-9.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-8.py | Updates tutorial to new show methods and analysis.fit API and display plotting. |
| docs/docs/tutorials/ed-8.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-7.py | Updates tutorial plotting/show methods to new display API. |
| docs/docs/tutorials/ed-7.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-6.py | Updates tutorial plotting/show methods to new display API. |
| docs/docs/tutorials/ed-6.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-5.py | Updates tutorial plotting/show methods to new display API. |
| docs/docs/tutorials/ed-5.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-4.py | Updates tutorial to analysis.fit API and display plotting. |
| docs/docs/tutorials/ed-4.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-3.py | Updates tutorial to new show methods, analysis.fit, and display plotting. |
| docs/docs/tutorials/ed-20.py | Adds new BEER-at-ESS tutorial (simulated TOF data workflow). |
| docs/docs/tutorials/ed-2.py | Updates tutorial to new minimizer/show/plotting APIs. |
| docs/docs/tutorials/ed-2.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-18.py | Updates plotting API usage to project.display.plotter. |
| docs/docs/tutorials/ed-18.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-17.py | Updates tutorial minimizer and plotting APIs to analysis.fit/display. |
| docs/docs/tutorials/ed-17.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-16.py | Updates tutorial to analysis.fit and display plotting API. |
| docs/docs/tutorials/ed-16.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-15.py | Updates tutorial to analysis.fit and display plotting API. |
| docs/docs/tutorials/ed-15.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-14.py | Updates tutorial to analysis.fit and display plotting API. |
| docs/docs/tutorials/ed-14.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-12.py | Updates tutorial plotting/show methods to new display API. |
| docs/docs/tutorials/ed-12.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-11.py | Updates tutorial plotting configuration to project.display.plotter. |
| docs/docs/tutorials/ed-11.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-10.py | Updates tutorial plotting to project.display.plotter. |
| docs/docs/tutorials/ed-10.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/docs/tutorials/ed-1.py | Updates tutorial plotting to project.display.plotter. |
| docs/docs/tutorials/ed-1.ipynb | Regenerated notebook reflecting updated tutorial API usage. |
| docs/architecture/package-structure-short.md | Updates documented package structure to include new categories. |
| docs/architecture/package-structure-full.md | Updates detailed package structure listing for new categories/classes. |
| docs/architecture/issues_open.md | Updates open-issues text to refer to new APIs and removes resolved calculator persistence item. |
| docs/architecture/issues_closed.md | Updates closed-issues log with calculator persistence + other historical notes. |
This PR it refactors the experiment, analysis, and project category architecture around explicit switchable categories, updates related calculator and CIF serialization behavior, and refreshes tutorials/docs to match the redesigned API.
Changes
fitcategory API, replacing the oldfit_modeinterface.